昨天我們已經簡單的認識了 GATT 的基本內容,然而在後續的內容中,我們需要一個實體的 BLE裝置讓我們能夠進行操作和控制,但是市面上的 BLE裝置千百種,加上還可能會遇上不同廠家因為硬體等因素導致的各種問題,我們需要一款可以由我們隨意設定,改變的藍芽裝置。
為此我要先介紹一款好用的工具。nRF Connect for Mobile
是由藍牙晶片大廠 Nordic Semiconductor 推出的開發工具。這款免費 App 能讓你的手機化身為強大的 BLE 工具,既能作為「掃描端(Central)」去探索、連接其他裝置,也能扮演「被連端(Peripheral)」,我們今天就是要透過 nRF Connect for Mobile
來建立能自由更改設定的「被連端(Peripheral)」。
打開 nRF Connect
App,點擊底部導覽列的「Advertiser」分頁。
點擊進入一個廣告配置 (例如 "Sample configuration"),或點擊右上角「+」新增。
在配置頁面中,向下滑動找到「Server」區塊。這裡就是我們要打造 GATT 服務的地方。
在 Server 區塊點擊「ADD SERVICE」,在彈出視窗中確認下拉選單為「Custom service」。
Name: 輸入 My Iron Man Service
。
UUID (手動生成與貼上):
a. 在瀏覽器打開 Online UUID Generator 並複製生成好的 UUID。
b. 回到 App,將這串 UUID 貼入 UUID 欄位。
點擊「OK」。
點擊 My Iron Man Service
進入其內部,點擊「ADD CHARACTERISTIC」,選擇「Custom Characteristic」,並重複此步驟三次:
特徵 A (唯讀):
Description: Read-Only Info
Properties: 只勾選 Read
。
Permissions: 只勾選 Read
。
Initial value: 選擇 Text (e.g. My value)
,並在欄位中輸入 Hello Iron Man!
。
點擊「OK」。
特徵 B (可讀寫):
Description: Remote Control Switch
Properties: 勾選 Read
和 Write
。
Permissions: 勾選 Read
和 Write
。
Initial value: 選擇 0x Bytes (e.g. 0300FA)
,並在欄位中輸入 00
(代表數值 0)。
點擊「OK」。
特徵 C (可訂閱):
Description: Live Sensor
Properties: 勾選 Read
和 Notify
。
Permissions: 勾選 Read
。(Notify 通常不需要額外的寫入權限,除非需要客戶端寫入特定描述符來啟用)。
Initial value: 選擇 0x Bytes (e.g. 0300FA)
,並在欄位中輸入 19
。(因為 25
的十六進位就是 19
)。
點擊「OK」。
這樣就建立了我們的第一個虛擬 BLE 裝置,但是看到這邊,不知道你會不會想一個問題,UUID 有著 128 位元碼的長度,如果每家廠家都根據自己的喜好,隨意設定 UUID的話,豈不是每看到一家廠商就要去查詢他的 UUID 所代表的定義了呢?
其實這個問題已有解了,不知道你還記不記得,我們昨天介紹 UUID 時,有提到 UUID 分為兩種,除了上面我們實作的自定義 UUID,還有另一種由藍芽聯盟定義的標準 UUID。
沒錯!為了解決這個混亂問題,藍牙技術聯盟 (SIG) 制定了一系列「官方標準 UUID」。這些 UUID 用於所有通用的功能(如心率、血壓、電池電量等),確保不同廠牌的裝置能互相溝通。
它們通常是以 16 位元短碼來表示,例如「電池服務」的 UUID 就是 0x180F
。這個短碼會被自動代入一組共用的「藍牙基礎 UUID」(0000xxxx-0000-1000-8000-00805f9b34fb
) 中,從而形成一個完整的 128 位元位址。
因此,任何 App 只要看到 0x180F
這個 UUID,就能立刻辨識出「啊!這是標準的電池服務」,並知道該如何與它互動。
回到 Server 設定的主畫面,再次點擊「ADD SERVICE」。
在彈出的視窗中,下拉選單依然選擇「Custom service」。
Name: 輸入 Battery Service
。
UUID: 複製並貼上官方的電池服務 UUID: 0000180F-0000-1000-8000-00805f9b34fb
點擊「OK」。
**新增標準特徵:
點擊剛建立的 Battery Service
進入其內部。
點擊「ADD CHARACTERISTIC」,選擇「Custom Characteristic」。
Description: 輸入 Battery Level
。
UUID: 複製並貼上電池電量的官方 UUID: 00002A19-0000-1000-8000-00805f9b34fb
Properties: 根據官方規範,手動勾選 Read
和 Notify
。
Permissions: 對應 Properties
,手動勾選 Read
。
Initial value:
選擇 0x Bytes (e.g. 0300FA)
。
在欄位中輸入 62
。(因為我們設定的電量是 98
,而 98
的十六進位就是 62
)。
點擊「OK」。
今天我們透過使用nRF Connect for Mobile
來實際建立一個GATT服務,後續等到實際需要連接藍芽的時候我們就可以啟用這個BLE裝置來進行模擬,明天我們會先來講解簡單的JS語法入門。
文章的最後,感謝能看到這裡的你,在這邊祝你早安、午安、晚安,我們明天見。